package com.yichuang.security.common.utils;

import org.apache.commons.lang3.StringUtils;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.Base64;

/**
  * <p>  </p>
  *
  * @site https://miliqkdoc.motopa.cn/
  * @author tuonioooo
  * @date 2022/12/12 12:12
  */

public class BASE64Utils {

	/**
	 *  @Author tuonioooo
	 *  @Date 2018-4-8 11:04
	 *  @Params [base64]
	 *  @Return byte[]
	 *  @Info  字符串解码
	 */
    public static byte[] decodeBase64(String s){
        return Base64.getDecoder().decode(s);
    }

	/**
	 *  @Author tuonioooo
	 *  @Date 2018-4-8 11:08
	 *  @Params [base64]
	 *  @Return byte[]
	 *  @Info   字符串编码
	 */
	public static byte[] encodeBase64(String s){
    	return Base64.getEncoder().encode(s.getBytes());
	}

	/**
	 *
	 * @param s
	 * @param charsetName ：默认是ISO-8859-1
	 * @return
	 * @throws UnsupportedEncodingException
	 * @Info 将字符串进行BASE64编码，并返回编码字符串
	 */
	public static String getEncodeBase64(String s, String charsetName) throws UnsupportedEncodingException {
		return StringUtils.isNotEmpty(s) ? new String(encodeBase64(s), (charsetName == null ? "ISO-8859-1" : charsetName)) : null;
	}

	/**
	 *  @Author tuonioooo
	 *  @Date 2018-4-8 11:03
	 *  @Params [s]
	 *  @Return BASE64字符串
	 *  @Info   字节进行BASE64编码，并返回编码字符串
	 */
	public static String getEncodeBase64(byte[] b) {
		return new String(Base64.getEncoder().encode(b));
	}

	/**
	 *  @Author tuonioooo
	 *  @Date 2018-4-8 11:13
	 *  @Params [s]
	 *  @Return java.lang.String
	 *  @Info  字节进行BASE64解码，并返回解码字符串
	 */
	public static String getDecodeBase64(byte[] b){
		return new String(Base64.getDecoder().decode(b));
	}

	/**
	 *  @Author tuonioooo
	 *  @Date 2018-4-8 11:13
	 *  @Params [s]
	 *  @Return java.lang.String
	 *  @Info  将字符串进行BASE64解码，并返回解码字符串
	 */
	public static String getDecodeBase64(String s, String charsetName) throws UnsupportedEncodingException {
		return StringUtils.isNotEmpty(s) ? new String(decodeBase64(s), (charsetName == null ? "ISO-8859-1" : charsetName)) : null;
	}

	/**
	 *  @Author tuonioooo
	 *  @Date 2018-4-8 11:16
	 *  @Params [imgbase64:图片base64编码, path:图片路径-具体到文件]
	 *  @Return boolean
	 *  @Info  根据图片的Base64编码，输出到指定文件
	 */
	public static boolean outPutImage(String imgbase64, String path) {
		if (imgbase64 == null)
			return false;
		try {
			// 解密
			byte[] b = decodeBase64(imgbase64);
			// 处理数据
			for (int i = 0; i < b.length; ++i) {
			if (b[i] < 0) {
			b[i] += 256;
			}
		}
			OutputStream out = new FileOutputStream(path);
			out.write(b);
			out.flush();
			out.close();
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}


	public static void main(String[] args) throws UnsupportedEncodingException {
		String str="asdsdsa";
		String encodeBase64 = getEncodeBase64(str, null);
		System.out.println("str：" + str);
		System.out.println("encode：" + encodeBase64);
		System.out.println("decode：" + getDecodeBase64(encodeBase64, null));

		System.out.println(" ==================== ");


	}
}
